(for Internet Explorer)
GetWScriptArgumentsNamed
ソース
テスト
→ vbslib.vbs
コマンドラインのオプション引数
を返します。
Function  GetWScriptArgumentsNamed( OptionName as string ) as string
【引数】
OptionName
返り値
コマンドラインに指定するオプションの名前
オプションの値
VBScript WSH を起動するコマンドラインの引数にダブルクォーテーションを含めることはできませんが、
本関数によるエスケープ文字の処理をすることで引数にダブルクォーテーションを含めることができます。
参考
ダブルクォーテーションの指定方法
→ T_CmdLine.vbs
T_GetWScriptArgumentsUnnamed
ParseWScriptArgumentQuotation
Function  ParseWScriptArgumentQuotation( Value as string ) as string
【引数】
Value
返り値
WScript.Arguments に入っている値
エスケープ文字の処理をした Value
に入っている値に、エスケープ文字の処理をしたものを返します。
参考
ソース
→ T_CmdLine.vbs
テスト
T_ParseWScriptArgumentQuotation
→ vbslib.vbs
VBScript WSH を起動するコマンドラインの引数にダブルクォーテーションを含めることはできませんが、
本関数によるエスケープ文字の処理をすることで引数にダブルクォーテーションを含めることができます。
ダブルクォーテーションの指定方法
(src)
Function  ArrayFromBashCmdLine( CmdLine as string ) as array of string
bash シェルのコマンドラインの1行を解析して、それぞれの項目を配列に格納する。
の bash 版です。
→ T_CmdLine.vbs # [T_ArrayFromBashCmdLine]
テスト
の bash 版です。
→ T_CmdLine.vbs # [T_ArrayFromBashCmdLine]
テスト
(src)
bash シェルのコマンドラインの1項目を取り出し、通常の文字列に戻す。
Function  MeltBashCmdLine( Line as string, in_out_Start as integer ) as string
Function  CmdLineFromStr( Str as string or array ) as string
文字列、または文字列の配列から、コマンドラインを作成します。
【引数】
Str
文字列、または文字列の配列
返り値
コマンドライン
ファイル:
vbslib.vbs
サンプル
cmd = CmdLineFromStr( Array( "findstr", "/C:""quot and space""", "*" ) )
Assert  cmd = "findstr ""/C:\""quot and space\"""" *"
→ T_CmdLine.vbs # [T_CmdLineFromStr]
テスト
それぞれの配列要素は、空白で区切ります。
文字列に空白や >, <, ^, | 記号を含むときは、" " で囲みます。
文字列にダブル・クォーテーションや \ 記号があるときは、それらの文字が、これから
起動するプログラムに渡るように \ を追加します。

ソース
→ vbslib.vbs
関連
Function  GetCmdLine() as string
現在のスクリプトを起動したときのコマンドラインを返します。
(src)
実行ファイル名と、パラメーターの両方を含みます。
関連
Function  ArgumentExist( Name as string ) as boolean
【引数】
Name
コマンドライン・オプション名
返り値
オプションが指定されているかどうか
指定した名前のコマンドライン・オプションが指定されているかどうかを返します。
/Opt1:1 ではなく /Opt1 では、WScript.Arguments.Named.Item("Opt1") は
Empty を返し、/Opt1 を指定しなかったときと、区別ができません。
ArgumentExist は、区別ができます。
Name の大文字小文字は区別します。
(src)
WScript.Arguments.Named.Item( "Opt1" )
  If ArgumentExist( "Opt1" ) Then ...
サンプル:
→ GetArgvNamed (clib)
関連
WScript.Arguments.Unnamed(0)
→ GetCommandLineExist (clib)
パラメーターが必須のオプションには、ArgumentExist を呼ぶ必要はありません。
WScript.Arguments.Named( "Opt1" )
(src)
Function  GetCommandLineOptionName( OneParameter as string ) as string
オプション名+値から、オプション名を返します。
【引数】
OneParameter
返り値
オプション名+値
オプション名
サンプル:
name = GetCommandLineOptionName( "/OptionA:12" )
'// name = "OptionA"
→ T_CmdLine.vbs # [T_CommandLineOption]
テスト
(src)
Function  GetCommandLineOptionValue( OneParameter as string ) as string
オプション名+値から、値を返します。
【引数】
OneParameter
返り値
オプション名+値
サンプル:
value = GetCommandLineOptionValue( "/OptionA:12" )
'// value = "12"
value = GetCommandLineOptionValue( "/OptionA:""C:\Program Files""" )
'// value = "C:\Program Files"
→ T_CmdLine.vbs # [T_CommandLineOption]
テスト
コマンドラインの1行にある、オプションの値を変更します。
Function  ModifyCmdLineOpt( CmdLine as string,
            OptionName as string, NewOptionNameAndParam as string ) as string
【引数】
CmdLine
NewOptionNameAndParam
コマンドラインの1行
オプション名と、変更後の値。 削除=Empty
OptionName
オプション名
(出力) 変更後のコマンドラインの1行
返り値
  new_cmdline = ModifyCmdLineOpt( "-Opt1 -Opt2:ValueA Value1", "-Opt2", "-Opt2:ValueB" )
  Assert  new_cmdline =           "-Opt1 -Opt2:ValueB Value1"
サンプル
  new_cmdline = ModifyCmdLineOpt( "-Opt1 -Opt2:ValueA Value1", "-Opt2", Empty )
  Assert  new_cmdline =           "-Opt1 Value1"
  new_cmdline = ModifyCmdLineOpt( "-Opt1 Value1", "-Opt2", "-Opt2:ValueB" )
  Assert  new_cmdline =           "-Opt1 -Opt2:ValueB Value1"
-Opt2 オプションの値を変更する
-Opt2 オプションを無くす
-Opt2 オプションがなければ追加する
-Opt2 オプションと、その値の間が空白のときは、OptionNmae 引数の末尾に ":"(コロン)を付ける
  new_cmdline = ModifyCmdLineOpt( "-Opt1 -Opt2 ValueA Value1", "-Opt2:", "-Opt2 ValueB" )
  Assert  new_cmdline =           "-Opt1 -Opt2 ValueB Value1"
複数指定できる -o オプションを追加するときは、OptionNmae 引数の末尾に "::"(コロン×2)を付ける
  new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::", "-o NewValue" )
  Assert  new_cmdline="-o NewValue -o ValueA -o ValueB Value1"
  new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::ValueB", "-o NewValue" )
  Assert  new_cmdline =           "-o ValueA -o NewValue Value1"
複数指定できる -o オプションを修正/削除するときは、OptionNmae 引数の末尾に "::"(コロン×2)
と値を付ける
  new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::ValueB", Empty )
  Assert  new_cmdline =           "-o ValueA Value1"
(src)
→ T_CmdLine.vbs # [T_ModifyCmdLineOpt]
テスト
移植性を持たせつつ将来のバージョンで関数の引数を追加できるようにしたいときは、
下記の引数を検討するとよいでしょう。
ビットフラグ引数
オプション引数(配列)
移植性を持たせつつ引数の数を変更したいときは、
新しく関数名を "<従来の関数名>Ex" にするか、
古い関数名を "<従来の関数名>_Old" にするとよいでしょう。
Sub  Main()
    Set c = get_SampleConsts()
    echo  FuncA( c.Bit0 )
    echo  FuncA( c.Bit1 )
    echo  FuncA( c.Bit0 or c.Bit1 )
    echo  FuncA( 0 )
    echo  FuncA( Empty )
End Sub

Function  FuncA( BitFlags )
    Set c = get_SampleConsts()
    s = ""
    If IsBitSet(        BitFlags, c.Bit0           ) Then  s = s + "A"
    If IsAnyBitsSet(    BitFlags, c.Bit0 or c.Bit1 ) Then  s = s + "B"
    If IsAllBitsSet(    BitFlags, c.Bit0 or c.Bit1 ) Then  s = s + "C"
    If IsBitNotSet(     BitFlags, c.Bit0           ) Then  s = s + "a"
    If IsAnyBitsNotSet( BitFlags, c.Bit0 or c.Bit1 ) Then  s = s + "b"
    If IsAllBitsNotSet( BitFlags, c.Bit0 or c.Bit1 ) Then  s = s + "c"
    FuncA = s
End Function


'*************************************************************************
'  <<< [get_SampleConsts] >>>
'*************************************************************************
Dim  g_SampleConsts

Function  get_SampleConsts()
      If IsEmpty( g_SampleConsts ) Then _
            Set g_SampleConsts = new SampleConsts
      Set get_SampleConsts = g_SampleConsts
End Function

Class  SampleConsts
      Public  Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8, Bit9
      Public  Bit10, Bit11, Bit12, Bit13, Bit14, Bit15, Bit16, Bit17, Bit18, Bit19
      Public  Bit20, Bit21, Bit22, Bit23, Bit24, Bit25, Bit26, Bit27, Bit28, Bit29
      Public  Bit30, Bit31

      Private Sub  Class_Initialize()
            Bit0  = &h0001
            Bit1  = &h0002
            Bit2  = &h0004
            Bit3  = &h0008
            Bit4  = &h0010
            Bit5  = &h0020
            Bit6  = &h0040
            Bit7  = &h0080
            Bit8  = &h0100
            Bit9  = &h0200
            Bit10 = &h0400
            Bit11 = &h0800
            Bit12 = &h1000
            Bit13 = &h2000
            Bit14 = &h4000
            Bit15 = CLng("&h8000")
            Bit16 = &h00010000
            Bit17 = &h00020000
            Bit18 = &h00040000
            Bit19 = &h00080000
            Bit20 = &h00100000
            Bit21 = &h00200000
            Bit22 = &h00400000
            Bit23 = &h00800000
            Bit24 = &h01000000
            Bit25 = &h02000000
            Bit26 = &h04000000
            Bit27 = &h08000000
            Bit28 = &h10000000
            Bit29 = &h20000000
            Bit30 = &h40000000
            Bit31 = &h80000000
      End Sub

      Public Function  ToStr( Number )
            Select Case  Number
                  Case Bit0 : ToStr = "Bit0"
                  Case Bit1 : ToStr = "Bit1"
                  '// ...
            End Select
      End Function
End Class
Function  IsBitSet( Variable as integer, ConstValue as integer ) as integer
1つのビットが立っているかどうかを判定します。
【引数】
Variable
ConstValue
調べる対象のビット・フィールド値
調べる位置のビットを1にしたビット・フィールド値
OrConstValue
調べる位置の複数のビットを1にしたビット・フィールド値
サンプル
ソース
複数のビットのうち1つ以上が立っているかどうかを判定します。
Function  IsAnyBitsSet( Variable as integer, OrConstValue as integer ) as integer
複数のビットのすべてが立っているかどうかを判定します。
Function  IsAllBitsSet( Variable as integer, OrConstValue as integer ) as integer
1つのビットが立っていないかどうかを判定します。
Function  IsBitNotSet( Variable as integer, ConstValue as integer ) as integer
複数のビットのうち1つ以上が立っていないかどうかを判定します。
Function  IsAnyBitsNotSet( Variable as integer, OrConstValue as integer ) as integer
複数のビットのすべてが立っていないかどうかを判定します。
Function  IsAllBitsNotSet( Variable as integer, OrConstValue as integer ) as integer
判定結果 (0以外=True、0=False)、論理型ではありません
返り値
→ T_Var.vbs
テスト
T_IsBitSet
→ vbslib.vbs
関連
参考
→ ビット演算
Set object = new SampleClass
FuncA  Array( &h0001 or &h0002, "ABC", object )

Sub  FuncA( in_out_Options )
    ParseOptionArguments  in_out_Options

    Assert  in_out_Options("integer") = &h0001 or &h0002
    Assert  in_out_Options("string") = "ABC"
    Assert  in_out_Options("SampleClass") Is object
    Assert  not in_out_Options.Exists("NotPassedType")

    option_flags = in_out_Options("integer")
    If in_out_Options.Exists("SampleClass") Then
        Set options = in_out_Options("SampleClass")
    Else
        Set options = new SampleClass
    End If
End Sub
Sub  ParseOptionArguments( in_out_Options as variant )
引数に指定した配列型のオプション引数を辞書型に変換します。 キーは要素の型名です。
【引数】
(入力) 任意の型の変数や配列や辞書やEmpty、(出力) 辞書
サンプル
ソース
→ T_Var.vbs
テスト
T_ParseOptionArguments
→ vbslib.vbs
キーは、大文字小文字を区別しません。
整数型(integer, byte, long)のアイテムに対応するキーは、"integer" です。
浮動小数型(single, double)のアイテムに対応するキーは、"float" です。
その他の型は、
の返り値がキーになります。 例: NameOnlyClass
ParseOptionArguments は、オプション引数(オプション的な引数)を扱いやすくします。
ユーザーは、オプションを指定しないときは Empty を渡します。
オプションを1つ以上指定するときは、配列型にまとめて渡します。
オプションを1つ指定するときは、配列に入れなくても構いません。
処理が開始されると、本関数によって、オプション引数は型をキーとした辞書に変換されます。
in_out_Options 引数に辞書を指定したときは、何もしません。
入力した配列に含まれない型をキーに指定した場合、アイテムは Empty になります。
サンプル
FuncA  123

Sub  FuncA( in_out_Options )
    ParseOptionArguments  in_out_Options

    Assert  in_out_Options("integer") = 123
End Sub
オプション引数をそのまま関数呼び出しに渡しているときは、辞書型に置き換わって返ってくる
可能性があります。 そして、その変数が再びオプション引数に渡される可能性があります。
ですので、必ず ParseOptionArguments を呼び出した後で、辞書のキーの有無からオプション
の有無を判定してください。
オプション引数を直接 TypeName 関数などで判定しないでください。
キーワード:
ArrayClass 型のアイテムに対応するキーは、"ArrayClass" ですが、配列型のアイテムに
対応するキーはできません。 配列は、上記のとおり複数のオプションをまとめるものとして
処理します。
Sub  include( path as string )
path に環境変数を含めることができます。 (%var% 形式)
クラス定義や関数定義が入った VBS ファイルのパスを指定します。

VBS ファイルで定義されたグローバル変数や関数は、include を呼び出した
関数の外から参照することはできません。
include "%ProgramFiles%\Movie Maker\moviemk.vbs"
関数定義やクラス定義が入った VBSファイルをインクルードします。
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
path に相対パスを指定するときは注意が必要です。
二重定義エラーが出るときの対策
インクルードする vbs ファイルに、すでに定義されているクラスの
定義があると、エラーになります。クラスは、インスタンスに影響する
ため上書きできません。 (関数は上書きできます)
二重にインクルードしないようにするか、クラス定義だけ1回だけ
インクルードするファイルに分割してください。
Dim  g_TestClass : If IsEmpty( g_TestClass ) Then _
  include  "TestClass.vbs" : g_TestClass = True
サンプル: 1回だけインクルードする
フォルダのパスを指定したり、ワイルドカードを指定すると、サブフォルダも
含めて include します。 ただし、フォルダのパスだけを指定した場合は、
*_obj.vbs ファイルだけ include します。
objs フォルダのサブフォルダも含めて、*_obj.vbs を include します
include "objs"
関連
テスト
→ T_Include.vbs # [main2]
サンプル
サンプル
include は、
の内部からも呼ばれます。
→ vbs_inc_sub.vbs
ソース
→ vbslib_mini.vbs
SectionTree オブジェクトを使って、全体の処理を複数のセクションに分割すると、途中のセクション
から実行することができるようになります。

たとえば、1つの関数の中で、複数のテストを連続して行っているとき、1つ1つのテストをセクションに
分けておくと、失敗したテストから実行させることができるようになります。
Sub  Test_start( tests )
    Set section = new SectionTree
'//SetStartSectionTree  "T_Sample2"
'// 一部のセクションだけ実行するときは有効にする

    '//===========================================================
    If section.Start( "T_Sample1" ) Then
        '// ここは実行されません
    End If : section.End_

    '// section.Start 〜 End_ の外は、常に実行する

    If section.Start( "T_Sample2" ) Then
        '// ここから実行されます
    End If : section.End_  '// ここで、「終了しました」と確認メッセージが表示される

    If section.Start( "T_Sample2" ) Then
        '// ここも実行されます
    End If : section.End_
    Pass
End Sub
サンプル
T_Sample2
(src)
ネストしているとき
サンプル
Sub  Test_start( tests )
  SetStartSectionTree  "Sec1, SubSec2"

  Dim  section : Set section = new SectionTree

  If section.Start( "Sec1" ) Then
    If section.Start( "SubSec2" ) Then
      '// ここは実行されます
    End If : section.End_
  End If : section.End_
  Pass
End Sub
テスト
(各メソッドを参照)
サンプル画面
Section> Sec1
<Section tree="Sec1">
Section> Sec1 > SubSec2
<Section tree="Sec1,SubSec2">
  :
</Section>
</Section>
サンプル画面
Section> T_Sample2
<Section tree="T_Sample2">
  :
</Section>
セクションの開始と終了で、現在のセクションの位置(親のツリーノードのセクション名から現在まで)
を表示します(下記、サンプル画面)。
関連
Function  SectionTree::Start( SectionName as string ) as boolean
セクションの開始を指定します。
ファイル:
vbslib.vbs
【引数】
SectionName
返り値
セクション名
セクションを実行するかどうか
テスト
→ T_SectionTree.vbs # [T_SectionTree_1]
→ T_SectionTree.vbs # [T_SectionTree_2]
→ T_SectionTree.vbs # [T_SectionTree_Err]
(src)
→ T_SectionTree.vbs # [T_SectionTree_0]
デバッグ用に、本関数の中から呼び出すコールバック関数を登録できます。
Sub  SectionTree::End_()
セクションの終了を指定します。
ファイル:
vbslib.vbs
テスト
(src)